// function factorial(num) {
//   let sum = 0
//   return function fn() {
//     let multiplication = 1
//     for (let i = 1; i <= num; i++) {
//       multiplication *= i
//     }
//     sum += multiplication
//     num--
//     if (num > 0) {
//       fn()
//     }
//     return sum
//   }
// }
// console.log(factorial(4)()) // 33

// function factorial(num) {
//   let multiplication = 1
//   for (let i = 1; i <= num; i++) {
//     multiplication *= i
//   }
//   return multiplication
// }

// function horn(num) {
//   let sum = 0
//   let g = num % 10
//   let s = Math.floor((num % 100) / 10)
//   let b = Math.floor(num / 100)
//   // console.log(g, s, b)
//   sum = factorial(g) + factorial(s) + factorial(b)
//   if (num === sum) {
//     return true
//   } else {
//     return false
//   }
// }

// for (let i = 100; i <= 999; i++) {
//   if (horn(i)) {
//     console.log(i)
//   }
// }

// //判断一个数是否为质数
// function prime(num) {
//   let flag = true
//   for (var i = 2; i < num; i++) {
//     if (num % i === 0) flag = false
//   }
//   return flag
// }

// function goldbach(evenNumber) {
//   if (evenNumber % 2 !== 0) return
//   //思路 如果 一个偶数 减去一个质数 结果还是质数 则满足条件
//   for (var i = 0; i < evenNumber; i++) {
//     if (prime(i) && prime(evenNumber - prime(i))) {
//       return true
//     }
//   }
//   return false
// }

// console.log(goldbach(12))

// function rev(str) {
//   let arr = str.split(' ').reverse()
//   return arr.join(' ')
// }
// console.log(rev('i come from beijing')) //gnirps

// function rightchange(str, n) {
//   if (n >= str.length) {
//     return str
//   }
//   let newStr = str.substr(str.length - n) + str.substr(0, str.length - n)
//   return newStr
// }
// console.log(rightchange('abcdef', 2))

//求平均值
// function average(arr) {
//   let sum = 0
//   arr.forEach(item => {
//     sum += item
//   })
//   return sum / arr.length
// }
// //返回大于平均值的数量
// function upAverage(arr) {
//   let newArr = arr.filter(item => item > average(arr))
//   return newArr.length
// }
// console.log(upAverage([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) //2

// function firstUp(str) {
//   let arr = str
//     .split(' ')
//     .map(item => item.replace(item[0], item[0].toUpperCase()))
//   return arr.join(' ')
// }
// console.log(firstUp('i love javascript very much'))

// function arrayMaxAndMin(arr) {
//   let baseArr = [...arr]
//   arr.sort((a, b) => a - b)
//   let max = arr[arr.length - 1]
//   let min = arr[0]
//   let maxIndex = baseArr.indexOf(arr[arr.length - 1])
//   let minIndex = baseArr.indexOf(arr[0])
//   return `最大值为${max}，最大值索引为${maxIndex}。最小值为${min}，最小值索引为${minIndex}。`
// }
// console.log(arrayMaxAndMin([2, 1, 4, 3]))

// function arrToStr(arr, str) {
//   return arr.join(str)
// }
// console.log(arrToStr([1, 2], '|'))

// function disZero(arr) {
//   let newArr = arr.filter(item => item !== 0)
//   return newArr
// }
// console.log(disZero([1, 2, 3, 0, 5, 0, 7, 8, 0, 10]))

// function duplicateRemoval(arr) {
//   let set = new Set(arr)
//   return [...set]
// }
// console.log(duplicateRemoval([1, 1, 1, 2, 2, 3, 4, 5, 6, 3, 4, 2, 4, 1]))

// function arrSort(arr) {
//   arr.sort((a, b) => a - b)
//   return arr
// }
// console.log(arrSort([4, 2, 3, 1]))
// var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']

// var countedNames = names.reduce(function (allNames, name) {
//   if (name in allNames) {
//     allNames[name]++
//   } else {
//     allNames[name] = 1
//   }
//   return allNames
// }, {})

// console.log(countedNames) //{ Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 }

// function arrToObj(arr) {
//   let obj = {}
//   arr.forEach(e => {
//     obj[e] = obj[e] ? (obj[e] += 1) : 1
//   })
//   return obj
// }

// console.log(arrToObj(['caozy', 'jinhx', 'chenk', 'yull', 'caozy']))

// function arrToObj(arr) {
//   return arr.reduce((all, i) => {
//     i in all ? all[i]++ : (all[i] = 1)
//     return all
//   }, {})
// }
// console.log(arrToObj(['caozy', 'jinhx', 'chenk', 'yull', 'caozy']))

// var maxProfit = function (prices) {
//   var min = prices[0],
//     max = 0
//   for (i in prices) {
//     //假定第一项就是最小买入值 如果当前值小于最小买入值那么把当前值作为最小买入值
//     if (prices[i] < min) {
//       min = prices[i]
//     }
//     //假定当前是最大卖出值 那么就将当前值减去最小值 获得最大利益
//     if (prices[i] - min > max) {
//       max = prices[i] - min
//     }
//   }
//   return max
// }

// function mul(num) {
//   let str = ''
//   for (let i = 1; i <= num; i++) {
//     str += `|${i}*${num}=` + num * i
//   }
//   return str
// }

// function multiplication() {
//   let arr = []
//   for (let i = 1; i < 10; i++) {
//     arr.push(mul(i))
//   }
//   return arr
// }
// console.log(multiplication())

// function maxr(charstr) {
//   //默认指针指向第一位跟第二位，如果第一位跟第二位相等则第二个指针往后移
//   var i = 0
//   var j = 1
//   var maxlength = 0
//   var maxchar = ''
//   while (i < charstr.length) {
//     // 如果两个指针指向的值相等后置位指针往后移一位
//     if (charstr.charAt(i) == charstr.charAt(j)) {
//       j++
//     } else {
//       //判断当前指针间隔与最大间隔的大小，如果间隔大于最大间隔，将当前间隔赋值为最大间隔，将最大字符串的值改为第一个指针的位置
//       if (j - i > maxlength) {
//         maxlength = j - i
//         maxchar = charstr.substr(i, j - i)
//       }
//       //如果两个指针的值不相同那么将前置位指针的位置移动到后指针，后指针往后移一位
//       i = j
//       j++
//     }
//   }
//   return maxchar
// }
// console.log(maxr('mmmiijjjjkkkkkkssptr'))

// //约数求和
// function about(num) {
//   let sum = 0
//   for (let i = 0; i < num; i++) {
//     if (num % i === 0) {
//       sum += i
//     }
//   }
//   return sum
// }
// //判断是否为亲密数
// function intimacy(num) {
//   if (about(num) === about(about(num))) {
//     return about(num)
//   }
//   return false
// }

// for (let i = 0; i < 2000; i++) {
//   if (intimacy(i) && i !== intimacy(i)) {
//     console.log(i, intimacy(i))
//   }
// }

// var arr = [1, 2, 3, 4]

// console.log(arr instanceof Array)
// // var num = arr.pop()
// // console.log(arr, num)
// arr.push(1, 2)
// console.log(arr)
// arr.length = 2
// console.log(arr)
// for (i of arr) {
//   console.log(i)
// }

// for (var i = 0; i < arr.length; i++) {
//   console.log(arr[i])
// }

// var arr2 = [5]

// var arr3 = arr.concat(arr2)

// var str = arr3.join('&&')
// console.log(str)
// map()
// function map(arr, fn) {
//   var res = []
//   for (i = 0; i < arr.length; i++) {
//     res.push(fn(arr[i]))
//   }
//   return res
// }

// function filter(arr, fn) {
//   var res = []
//   for (i = 0; i < arr.length; i++) {
//     if (fn(arr[i])) {
//       res.push(arr[i])
//     }
//   }
//   return res
// }

// var arr = [1, 2, 3, 4, 'caozy', 0, 0]
// var arr2 = filter(arr, function (i) {
//   return i !== 'caozy'
// })
// console.log(arr2, arr)
// var arr2 = arr.filter(function (i) {
//   return i !== 0
// })
// console.log(arr2, arr)
// var arr1 = map(arr, function (item) {
//   return item * 2
// })
// console.log(arr1, arr)
// var arr = [1, 2, 3]
// var arr1 = arr.map(function (item) {
//   return item * 2
// })
// console.log(arr1, arr)
// a = 2
// var a
// function a(str, num, type) {
//   console.log(111)
//   return
// }
// // // console.log(a('1', 2))
// // var b = a()
// // console.log(b)
// console.log(a instanceof Array)
// var i = 1
// function a() {
// b = 2
// while (i < 5) {
//   a()
//   i++
// }
// function b() {
//   console.log(i)
// }
// }

// console.log(b)

// var a = 2,
//   b = 1

// setTimeout(() => {
//   console.log(b)
// }, 0)

// function a() {
//   // 10000
// }
// function b() {
//   // 20000
// }
// console.log(a)

// var a2 = 1
// function c() {
//   setTimeout(function () {
//     a2++
//   }, 0)
//   return

// }
// setTimeout(function () {
//   console.log(a2)
// }, 0)

// var flag = true
// setTimeout(() => {
//   flag = false
//   console.log(flag)
// }, 2000)
// while (flag) {}
// console.log('停了2s')

// (function a() {
//   console.log(111)
// })()

// -function () {
//   console.log(333)
// }()
// var ren = {
//   age: 18,
//   name: 'caozy',
//   sex: 'man',
//   国籍: '中国',
//   say () {
//     this.sex
//     console.log('说话')
//   }
// }

// function Ren(age, name, sex) {
//   this.age = age
//   this.name = name
//   this.sex = sex
// }
// var caozy = new Ren(18, 'caozy', 'man')
// console.log(caozy)
// ren['国籍']

// var str = new String('1234')
// console.log(str)

// function a (fn) {

//   return function () {

//   }
// }
// function b() {}
// a(b)

var a = 0 || 2 || 3 //取第一个为true的值

console.log(a)

var b = 1 && 0 && 3 //取第一个不为真的值

// setInterva
// setTimeout
